﻿// ---------------------------------------------------------------------
// Partial của lớp SSupervisor
//
// Nội dung:
//    + Các hàm gửi message dùng cho API
//
// Copyright (c) 2009 YugiOH
//
// Nguyễn Hữu Lê Trọng Tín      YM: ilu2009             ĐT: 0906520611 
// Võ Phước Hậu                 YM: phuochauspkt        ĐT: 0979202707
// ---------------------------------------------------------------------


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;
using Yugi.Client.Card;

namespace ServerYuGi
{
    public partial class SSupervisor 
    {
        /// <summary>
        /// Gửi message đến tất cả player báo gán điểm công cho lá bài summon
        /// </summary>
        /// <param name="data">dữ liệu gửi</param>
        public void SendMessage_CARD_SETCONG_ToAll(byte[] data)
        {
            //ServerSocket.SendMessageToEveryOne(YMSG.CARD_SETCONG, data);
            Table.SendMessageAll(YMSG.CARD_SETCONG, data);
        }

        /// <summary>
        /// Gửi message đến tất cả player báo gán điểm thủ cho lá bài summon
        /// </summary>
        /// <param name="data">dữ liệu gửi</param>
        public void SendMessage_CARD_SETTHU_ToAll(byte[] data)
        {
            //ServerSocket.SendMessageToEveryOne(YMSG.CARD_SETTHU, data);
            Table.SendMessageAll(YMSG.CARD_SETTHU, data);
        }

        /// <summary>
        /// Gửi message đến 1 player để yêu cầu chọn một số lượng lá bài trên tay player đó
        /// </summary>
        /// <param name="IDplayer">ID player gửi</param>
        /// <param name="SoLuongLaBai">số lượng lá bài phải chọn từ người chơi</param>
        public void SendMessage_REQUEST_CHONBAI_NGUOICHOI_TAY_ToID(int IDPlayer, int SoLuongLaBai, YType type)
        {

            int IDRequest = RevMSGmanager.GetIDRequest();
            Table.SendMessageToID(IDPlayer, YMSG.REQUEST_CHONBAI_NGUOICHOI_TAY, IDRequest, SoLuongLaBai, (int)type);
        }

        /// <summary>
        /// Gửi message đến 1 player để yêu cầu chọn một số lượng lá bài trên bàn player đó
        /// </summary>
        /// <param name="IDPlayer">ID player gửi</param>
        /// <param name="SoLuongLaBai">số lượng lá bài phải chọn từ người chơi</param>
        public void SendMessage_REQUEST_CHONBAI_NGUOICHOI_BAN_ToID(int IDPlayer, int SoLuongLaBai,YType type)
        {
            int IDRequest = RevMSGmanager.GetIDRequest();
            Table.SendMessageToID(IDPlayer, YMSG.REQUEST_CHONBAI_NGUOICHOI_BAN, IDRequest, SoLuongLaBai, (int)type);
        }
        /// <summary>
        /// Gửi message đến 1 player để yêu cầu chọn một số lượng lá bài trên bàn player đó
        /// </summary>
        /// <param name="IDPlayer">ID player gửi</param>
        /// <param name="SoLuongLaBai">số lượng lá bài phải chọn từ người chơi</param>
        public void SendMessage_REQUEST_CHONBAI_TRENBAN_ToID(int IDPlayer, int SoLuongLaBai, YType type)
        {
            int IDRequest = RevMSGmanager.GetIDRequest();
            Table.SendMessageToID(IDPlayer, YMSG.REQUEST_CHONBAI_TRENBAN, IDRequest, SoLuongLaBai, (int)type);
        }
        /// <summary>
        /// Gửi message đến 1 player để yêu cầu chọn một số lượng lá bài trên tay đối thủ
        /// </summary>
        /// <param name="IDPlayer">ID player gửi</param>
        /// <param name="SoLuongLaBai">số lượng lá bài phải chọn của đối thủ</param>
        public void SendMessage_REQUEST_CHONBAI_DOITHU_TAY_ToID(int IDPlayer, int SoLuongLaBai, YType type)
        {
            int IDRequest = RevMSGmanager.GetIDRequest();
            Table.SendMessageToID(IDPlayer, YMSG.REQUEST_CHONBAI_DOITHU_TAY, IDRequest, SoLuongLaBai,(int)type);
        }

        /// <summary>
        /// Gửi message đến 1 player để yêu cầu chọn một số lượng lá bài trên bàn đối thủ
        /// </summary>
        /// <param name="IDPlayer">ID player gửi</param> 
        /// <param name="SoLuongLaBai">số lượng lá bài phải chọn của đối thủ</param>
        public void SendMessage_REQUEST_CHONBAI_DOITHU_BAN_ToID(int IDPlayer,int SoLuongLaBai,YType type)
        {
            int IDRequest = RevMSGmanager.GetIDRequest();
            Table.SendMessageToID(IDPlayer, YMSG.REQUEST_CHONBAI_DOITHU_BAN, IDRequest, SoLuongLaBai, (int)type);
        }

        public void SendMessage_REQUEST_CHONBAI_DANHSACH_ToID(int IDPlayer, int SoLuongCanChon, int SoLuongCoTheChon,List<int> ListIDCard)
        {
            int IDRequest = RevMSGmanager.GetIDRequest();
            List<byte> tmp = new List<byte>();
            tmp.Add((byte)IDRequest);
            tmp.Add((byte)SoLuongCanChon);
            tmp.Add((byte)SoLuongCoTheChon);
            foreach (int ID in ListIDCard)
            {
                tmp.Add((byte)ID);
            }
            Table.SendMessageToID(IDPlayer, YMSG.REQUEST_CHONBAI_DANHSACH,tmp.ToArray());
        }

        public void SendMessage_REQUEST_ASK(int IDPlayer, string message)
        {
            int IDRequest = RevMSGmanager.GetIDRequest();
            List<byte> tmp = new List<byte>();
            byte[] data = UTF8Encoding.UTF8.GetBytes(message);
            tmp.Add((byte)IDRequest);
            tmp.Add((byte)data.Length);
            tmp.AddRange(data);
            Table.SendMessageToID(IDPlayer, YMSG.REQUEST_ASK, tmp.ToArray());
        }

        public void SendMessage_API_DRAWCARD_ToAll(int IDPlayer, int ID, int CardTypeID)
        {
            List<byte> tmp = new List<byte>();
            tmp.Add((byte)IDPlayer);
            tmp.AddRange(BitConverter.GetBytes(CardTypeID));
            tmp.Add((byte)ID);
            //Table.SendMessageAll(YMSG.API_DRAWCARD, IDPlayer, CardTypeID, ID);// old
            Table.SendMessageAll(YMSG.API_DRAWCARD, tmp.ToArray());
        }

        public void SendMessage_API_SPECIALSUMMON_ToAll(int IDPlayer, int ID, int CardTypeID, Zone typeZone)
        {
            List<byte> tmp = new List<byte>();
            tmp.Add((byte)IDPlayer);
            tmp.AddRange(BitConverter.GetBytes(CardTypeID));
            tmp.Add((byte)ID);
            tmp.Add((byte)typeZone);
            //Table.SendMessageAll(YMSG.API_SPECIALSUMMON, IDPlayer, CardTypeID, ID,typeZone); // old
            Table.SendMessageAll(YMSG.API_SPECIALSUMMON, tmp.ToArray());
        }

        public void SendMessage_API_CHANGECONTROL_ToAll(int IDPlayer, int IDcard, int IDPlayer2, Zone from, Zone to)
        {
            Table.SendMessageAll(YMSG.API_CHANGECONTROL, IDPlayer, IDcard, IDPlayer2,from,to);
        }

        public void SendMessage_CARD_XOABAI_TAY_ToID(int IDPlayer, int IDcard, int vitrilabai)
        {
            Table.SendMessageToID(IDPlayer,YMSG.CARD_XOABAI_TAY,IDcard);
            SPlayer player = LayPlayerKhacVoiID(IDPlayer);
            SendMessage_CARD_XOABAI_DOITHU_TAY_ToID(player.ID, vitrilabai);
        }
        public void SendMessage_CARD_XOABAI_GRAVEYARD_ToAll(int IDPlayer,int IDcard)
        {
            Table.SendMessageAll(YMSG.CARD_XOABAI_GRAVEYARD,IDPlayer, IDcard);
        }

        public void SendMessage_CARD_MOVETO_GRAVEYARD_ToAll(int IDPlayer, int CardType_ID, int IDcard)
        {
            //Table.SendMessageAll(YMSG.CARD_MOVETO_GRAVEYARD, IDPlayer,CardType_ID,IDcard); //old
            List<byte> data = new List<byte>();
            data.Add((byte)IDPlayer);
            data.AddRange(BitConverter.GetBytes(CardType_ID));
            data.Add((byte)IDcard);
            Table.SendMessageAll(YMSG.CARD_MOVETO_GRAVEYARD, data.ToArray());
        }

        public void SendMessage_API_SPECIALSUMMON_XONG_ToID(int IDPlayer, object[] param)
        {
            Table.SendMessageToID(IDPlayer,YMSG.API_SPECIALSUMMON_XONG,param);
        }

        public void SendMessage_API_MOVECARD_ToID(int IDPlayer, int CardTypeID, int CardID, Zone From, Zone To)
        {
            //Table.SendMessageToID(IDPlayer, YMSG.API_MOVECARD, CardTypeID, CardID, From, To); // old
            List<byte> data = new List<byte>();
            data.AddRange(BitConverter.GetBytes(CardTypeID));
            data.Add((byte)CardID);
            data.Add((byte)From);
            data.Add((byte)To);
            Table.SendMessageToID(IDPlayer,YMSG.API_MOVECARD, data.ToArray());
        }
        public void SendMessage_API_MOVECARD_DOITHU_ToID(int IDPlayer, Zone From, Zone To, byte[] data)
        {
            List<byte> tmp = new List<byte>();
            tmp.Add((byte)From);
            tmp.Add((byte)To);
            tmp.AddRange(data);
            Table.SendMessageToID(IDPlayer, YMSG.API_MOVECARD_DOITHU,tmp.ToArray());
        }

       
    }
}
